package asoasd1212;

public class J06_convirsions {

	//형변환 conversions
	//서로 다른 자료형을 처리할때 종종 변환이 필요
	//float avg =(float) tot / 3 ;

	//두자료가 같은 자료형이라면 대입은 성공적으로 처리
	//같은 유형으로 변환하는 것을 동질성 변환이라 한다.
	
	
	//하지만, 다른유형으로의 변환은 성공을 보장할수없음
	//기본자료형 변환에는 확대/축소 변환이있음
	
	//확대 형변환 widening conversion
	//int 형에서 long 형으로의 변환처럼
	//첫번째 유형에 비해 두번째 유형의 크기가 같거나 클때 발생함
	//확대변환시 정보 손살의 위험은 발생하지않음
	//단, 정밀도 손실이 간혹 발생할수있음
	//확대 변환은 암시적으로 일어남
	
	//축소형 변환 narrowing conversion
	//long 형에서 int형으로의 변환처럼
	//첫번째 유형에 비해 두번째 유형의 크기가 작을때 발생함
	//축소 형변환은 확대형 변환과 달리 명시적이어야함
	//괄호안에 변환하려는 유형을 지정
	//(float)는 컴파일러에게 float형으로 변환할것을 지시함
	//정보손실이 발생할 수 있기때문에 유의해야함
	//이것은 프로그램 결함을 야기하
	public static void main(String[] args) {
		// 동질성 변환 identity conversion
		int a=90;
		int b=a;
		
		//확대형 변환 
		long c =a;
		
		//축소 형변환 
		int d =(int)c;
		
        //축소 형변환으로 인한 정보손실
		long e=1234567890123L;
		int f = (int) e;
		
		System.out.println(e);
		System.out.println(f);
		
		//연산자 우선순위
		int g=1;
		int h=2;
		int i=3;
		int j=g+h*i;
		//모든연산자에는 우선순위가있다.
		//가장 높은 우선순위는 (),++,--
		
		
		int k=5;
		int L=5;
		boolean m = k * 5 == L+20;
		
		//승격 promote
		byte n =5;
		//byte o =-n;
		byte o=(byte)-n;
		//놀랍게도 오류발생!
		//단항 연산자 - 에의해 n변수가 int형으로 승격
		//문제 해결을 위해 명시적 축소 형변환을 사용하거나  int 형으로 바꾸면됨
		
		
		short q = 100;
		short r = 200;
		//short s = q + r;
		//이항연산자 + 에의해 
		//q,r 변수가 int 형으로 승격
		short s =(short)( q + r);
		
		//주석 comments
		//프로그램 코드에 덧붙이는 설명문, 해설
		//컴파일러가 소스를 컴파일할때
		//주석은 무시하고 넘어감
		//해당 코드가 제공하는 기능,용도,의미를 
		//쉽게 파악하도록 하기 위해 주석을 다는 것은 좋은습관이다.
		//자바에서는 2가지 주석유형제공 -C,C++과 유사
		//전통적인 주석은 /*와*/ tkdldp wntjrdmf wkrtjd 
		//주의) 중첩해서 사용하면 안됨!!
		//한줄주석인 //는 코드 끝에 작성하는 주석
		
		/* 이문장은 주석입니다! */
		//    /*/* */*/   <--이와같은 중첩금지
		
		//연결Join 연산자 +(concatenate)
		//일반적으로 + 연산자는 두 수를 더하는 기능을 가짐
		//하지만, 문자나 문자열에 + 연산자를 사용하면
		//앞의 문자와 뒤의 문자를 연결(합치는)해줌
		char u ='가';
		char v ='나';
		System.out.println(u);
		System.out.println(v);
		System.out.println(u+v);
		//하지만, 문자에 사용하는 +연산자로 인한 오버헤드 때문에 StringBuilder클래스를 주로 사용
		
		
		
	}

}
